﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using Ubatic.Business.Services;
using Ubatic.Common.Dto;
using Ubatic.Ui.Web;
using System.Text;
using System.Net.Mail;
using Ubatic.Contracts.Services;
using Ubatic.Ui.Web.Classes;
using Ubatic.Ui.Web.Code;

namespace UbaTic.Ui.Web.Account
{
    public partial class Register : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //this.Message.Text = string.Empty;
        }

        protected void CreateUserButton_Click(object sender, EventArgs e)
        {
            Usuario usuarioDto = new Usuario();
            usuarioDto.Email = Email.Text;
            usuarioDto.Nombre = FirstName.Text;
            usuarioDto.Apellido = LastName.Text;
            usuarioDto.Password = Password.Text;
            usuarioDto.PreguntaSecreta = this.Question.Text;
            usuarioDto.RespuestaSecreta = this.Answer.Text;
            usuarioDto.GuidMailConfirmacion = Guid.NewGuid();

            if (this.CreateIncompleteUser(usuarioDto))
            {
                ShowMessage(ResourceMessages.UsuarioInactivoCreado, WebMessageType.Notification);
                this.pnlRegister.Visible = false;
            }
        }

        private bool CreateIncompleteUser(Usuario usuarioDto)
        {
            bool result = true;
            ISecurityService svc = ServiceFactory.GetSecurityService();
            try
            {
                usuarioDto.HttpContextUrlAuthority = HttpContext.Current.Request.Url.Authority;
                usuarioDto.Id = svc.CreateIncompleteUser(usuarioDto);
            }
            catch (Exception ex)
            {
                this.AddErrorToValidators(ex.Message);
                result = false;
            }
            return result;
        }

        //private bool SendMail(Usuario usuarioDto)
        //{
        //    bool result = true;
        //    // Now lets create an email message
        //    StringBuilder emailMessage = new StringBuilder();
        //    emailMessage.Append("Gracias por crear su cuenta en UBATIC");
        //    emailMessage.Append("<br />");
        //    emailMessage.Append("Por favor haga click en el link para activar su cuenta <br />");
        //    emailMessage.Append(string.Format("<a href='http://{0}/Account/ActivateUser.aspx?Id={1}&Code={2}'>Activate {3} </a>", HttpContext.Current.Request.Url.Authority, usuarioDto.Id, usuarioDto.GuidMailConfirmacion.ToString(), usuarioDto.Email));
        //    MailMessage email = new MailMessage();
        //    email.To.Add(new MailAddress(usuarioDto.Email));
        //    email.Subject = "Por favor active su cuenta UBATIC";
        //    email.Body = emailMessage.ToString();
        //    email.IsBodyHtml = true;

        //    // Send the email
        //    SmtpClient client = new SmtpClient();
        //    try
        //    {
        //        client.Send(email);
        //    }
        //    catch
        //    {
        //        this.AddErrorToValidators(ResourceMessages.EnvioMailActivacionFallido);
        //        result = false;
        //    }
        //    return result;
        //}

        private void AddErrorToValidators(string errorMsg)
        {
            CustomValidator custError = new CustomValidator();
            custError.ValidationGroup = "RegisterUserValidationGroup";
            custError.IsValid = false;
            custError.ErrorMessage = errorMsg;
            this.Validators.Add(custError);
        }
    }
}
